package com.idroc.storage;

import java.nio.ByteBuffer;

/**
 * IO块文件
 * @author yuyoo (yuyoo4j@163.com)
 *
 */
public interface IoBlockFile {

	/**
	 * 获取IO文件ID
	 * @return -- 文件ID
	 */
	int getId();
	
	/**
	 * 获取IO文件名称
	 * @return
	 */
	String getName();
	
	/**
	 * 创建一个IO块
	 * @param offset -- IO块文件中的偏移
	 * @param backend -- IO块底层数据数组
	 * @param backendOffset -- IO块底层数据数组中的偏移
	 * @return -- IO块
	 */
	IoBlock newIoBlock(long offset, byte[] backend, int backendOffset);
	
	/**
	 * 根据IO文件偏移读取IO块
	 * @param offset -- IO文件中的偏移
	 * @return -- IO块
	 */
	IoBlock read(long offset);
	
	/**
	 * 根据IO文件偏移读取IO块数据
	 * @param offset -- IO文件中的偏移
	 * @param data -- IO块数据
	 * @param start -- 数组开始偏移
	 * @param length -- IO块的大小
	 * @return -- true, 如果成功读取
	 */
	boolean readData(long offset,  byte[] data, int start, int length);
	
	/**
	 * 将IO块写到IO文件
	 * @param block -- IO块
	 * @return -- true,如果写入成功
	 */
	boolean write(IoBlock block);
	
	/**
	 * 将IO块数据写入IO文件
	 * @param offset -- IO文件中的偏移
	 * @param data -- IO块数据
	 * @param start -- 数组开始偏移
	 * @param length -- IO块的大小
	 * @return -- true, 如果写入成功
	 */
	boolean writeData(long offset, byte[] data, int start, int length);
	
	/**
	 * IO块文件中IO块的大小
	 * @return -- IO块的大小
	 */
	int getBlockSize();
}
